import mysql.connector
from mysql.connector import Error


def create_cache_table(db_config):
    """先删除旧表（如果存在），再创建新的缓存数据表"""
    connection = None  # 初始化连接变量，避免未定义错误
    try:
        # 建立数据库连接
        connection = mysql.connector.connect(**db_config)
        if connection.is_connected():
            cursor = connection.cursor()

            # 先删除旧表（关键修改：确保表结构更新）
            drop_table_query = "DROP TABLE IF EXISTS data_cache;"
            cursor.execute(drop_table_query)
            print("已删除旧的缓存表（如果存在）")

            # 创建新的缓存表SQL语句（使用LONGTEXT解决数据过长问题）
            create_table_query = """
            CREATE TABLE data_cache (
                id INT AUTO_INCREMENT PRIMARY KEY,
                func_name VARCHAR(255) NOT NULL,
                key_name VARCHAR(255),
                data_type ENUM('dataframe', 'json', 'other') NOT NULL,
                data LONGTEXT,  -- 改为LONGTEXT支持更大数据
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                INDEX idx_func_name (func_name)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
            """

            # 执行创建表操作
            cursor.execute(create_table_query)
            print("新的缓存表 data_cache 创建成功")

            # 提交事务
            connection.commit()

    except Error as e:
        print(f"数据库错误: {e}")
        if connection:
            connection.rollback()  # 出错时回滚事务
    finally:
        # 确保连接关闭
        if connection and connection.is_connected():
            cursor.close()
            connection.close()
            print("数据库连接已关闭")


if __name__ == "__main__":
    # 数据库配置（请根据实际环境修改）
    db_config = {
        'host': 'localhost',
        'user': 'root',
        'password': '123456',  # 替换为你的数据库密码
        'database': 'user_behavior',
        'port': 3306
    }

    # 调用函数创建缓存表
    create_cache_table(db_config)